package demo;
class Person{
    public String name;
    public int age;
    public Person(String name,int age){
        this.name=name;
        this.age=age;
        System.out.println("父类构造方法执行！");
    }
    {
        System.out.println("父类实例代码块执行！");//实例代码块在创建对象之后执行
    }
    static{
        System.out.println("父类静态代码块执行！");//静态代码块随类加载时执行 静态代码块只执行一次
    }
}
class Student extends Person{
    int id;
    public Student(String name,int age,int id){
        super(name,age);
        this.id=id;
        System.out.println("子类构造方法执行!");
    }
    {
        System.out.println("子类实例代码块执行！");
    }
    static{
        System.out.println("子类静态代码块执行！");
    }

}
public class Test {
    public static void main(String[] args) {
        System.out.println("-----------------------------------------------");
        Student student=new Student("李四",19,10000001);
        System.out.println("-----------------------------------------------");
        Student student2=new Student("李五",20,10000002);//第二次实例化时父子类的静态代码块都不会再执行
        System.out.println("-----------------------------------------------");

    }

}
 /*  运行结果各个代码块的执行顺序：
 *     1.父类静态代码块先执行
 *     2.子类静态代码块再执行
 *     3.父类实例代码块执行
 *     4.父类构造方法执行
 *     5.子类实例代码块执行
 *     6.子类构造方法执行
 *
 *
 * */